namespace SideShow.Driver.ComInterop
{
    using System;
    using System.Runtime.CompilerServices;
    using System.Runtime.InteropServices;

    
    #pragma warning disable 0108

    [ComImport, Guid("896DF312-22B4-4A9D-95DD-A364AAF59769"), InterfaceType((short) 1), TypeLibType((short) 0x200)]
    public interface IWDFIoRequest : IWDFObject
    {
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void DeleteWdfObject();
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void AssignContext([In, MarshalAs(UnmanagedType.Interface)] IObjectCleanup pCleanupCallback, [In] IntPtr pContext);
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void RetrieveContext(out IntPtr ppvContext);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void AcquireLock();
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void ReleaseLock();
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void CompleteWithInformation([In, MarshalAs(UnmanagedType.Error)] int CompletionStatus, [In, ComAliasName("SideShow.Driver.ComInterop.ULONG_PTR")] uint Information);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void SetInformation([In, ComAliasName("SideShow.Driver.ComInterop.ULONG_PTR")] uint Information);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void Complete([In, MarshalAs(UnmanagedType.Error)] int CompletionStatus);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void SetCompletionCallback([In, MarshalAs(UnmanagedType.Interface)] IRequestCallbackRequestCompletion pCompletionCallback, [In] IntPtr pContext);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        _WDF_REQUEST_TYPE GetType();
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void GetCreateParameters(out uint pOptions, out ushort pFileAttributes, out ushort pShareAccess);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void GetReadParameters([ComAliasName("SideShow.Driver.ComInterop.ULONG_PTR")] out uint pSizeInBytes, out long pullOffset, out uint pulKey);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void GetWriteParameters([ComAliasName("SideShow.Driver.ComInterop.ULONG_PTR")] out uint pSizeInBytes, out long pullOffset, out uint pulKey);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void GetDeviceIoControlParameters(out uint pControlCode, [ComAliasName("SideShow.Driver.ComInterop.ULONG_PTR")] out uint pInBufferSize, [ComAliasName("SideShow.Driver.ComInterop.ULONG_PTR")] out uint pOutBufferSize);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void GetOutputMemory([MarshalAs(UnmanagedType.Interface)] out IWDFMemory ppWdfMemory);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void GetInputMemory([MarshalAs(UnmanagedType.Interface)] out IWDFMemory ppWdfMemory);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void MarkCancelable([In, MarshalAs(UnmanagedType.Interface)] IRequestCallbackCancel pCancelCallback);
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void UnmarkCancelable();
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        int CancelSentRequest();
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void ForwardToIoQueue([In, MarshalAs(UnmanagedType.Interface)] IWDFIoQueue pDestination);
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void Send([In, MarshalAs(UnmanagedType.Interface)] IWDFIoTarget pIoTarget, [In] uint Flags, [In] long Timeout);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void GetFileObject([MarshalAs(UnmanagedType.Interface)] out IWDFFile ppFileObject);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void FormatUsingCurrentType();
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        uint GetRequestorProcessId();
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void GetIoQueue([MarshalAs(UnmanagedType.Interface)] out IWDFIoQueue ppWdfIoQueue);
        [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void Impersonate([In] _SECURITY_IMPERSONATION_LEVEL ImpersonationLevel, [In, MarshalAs(UnmanagedType.Interface)] IImpersonateCallback pCallback, [In] IntPtr pvCallbackContext);
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        int IsFrom32BitProcess();
        [PreserveSig, MethodImpl(MethodImplOptions.InternalCall, MethodCodeType=MethodCodeType.Runtime)]
        void GetCompletionParams([MarshalAs(UnmanagedType.Interface)] out IWDFRequestCompletionParams ppCompletionParams);
    }
}

